81 lines
2.5 KiB
Plaintext
81 lines
2.5 KiB
Plaintext
////////////////////////
|
|
// hos_place_hench - place 9 henchmen out of 16 randomly
|
|
///////////////////////
|
|
|
|
void main()
|
|
{
|
|
object oWP;
|
|
object oHench;
|
|
object oMod=GetModule();
|
|
int nR;
|
|
int nC;
|
|
int nL;
|
|
int nAGE;
|
|
string sRes;
|
|
int nEvil=FALSE; // has the evil conversation been handled?
|
|
// Place Mage Guild downstairs first
|
|
nR=d4();
|
|
nC=5;
|
|
if (nR==2) nC=3;
|
|
else if (nR==3) { nC=16; nEvil=TRUE; }
|
|
else if (nR==4) nC=4;
|
|
sRes="hench"+IntToString(nC);
|
|
SetLocalInt(oMod,"n"+sRes,TRUE);
|
|
oWP=GetWaypointByTag("HENCH_SPAWN6");
|
|
nR=d8();
|
|
if (nEvil==TRUE) nR=1;
|
|
else { nR++; }
|
|
oHench=CreateObject(OBJECT_TYPE_CREATURE,sRes,GetLocation(oWP),FALSE);
|
|
SetLocalInt(oHench,"nHenchConv",nR);
|
|
SetLocalObject(oHench,"oSpawnLoc",oWP);
|
|
nL=1;
|
|
while(nL<10)
|
|
{ // place henchmen
|
|
if (nL==6) nL=7;
|
|
oWP=GetWaypointByTag("HENCH_SPAWN"+IntToString(nL));
|
|
nR=Random(16)+1;
|
|
sRes="hench"+IntToString(nR);
|
|
while(GetLocalInt(oMod,"n"+sRes)==TRUE)
|
|
{ // find unused henchman
|
|
nR=Random(16)+1;
|
|
sRes="hench"+IntToString(nR);
|
|
} // find unused henchman
|
|
SetLocalInt(oMod,"n"+sRes,TRUE);
|
|
oHench=CreateObject(OBJECT_TYPE_CREATURE,sRes,GetLocation(oWP),FALSE);
|
|
SetLocalObject(oHench,"oSpawnLoc",oWP);
|
|
nAGE=GetAlignmentGoodEvil(oHench);
|
|
nC=0;
|
|
if (nAGE==ALIGNMENT_EVIL&&nEvil!=TRUE) { nC=1; nEvil=TRUE; }
|
|
else
|
|
{
|
|
nC=d8()+1;
|
|
nAGE=0;
|
|
while(GetLocalInt(oMod,"nHenchConv"+IntToString(nC))==TRUE&&nAGE<6)
|
|
{ // find unused conversation
|
|
nC=d8()+1;
|
|
nAGE++;
|
|
} // find unused conversation
|
|
if (GetLocalInt(oMod,"nHenchConv"+IntToString(nC))==TRUE)
|
|
{ // traverse in order
|
|
nC=0;
|
|
nAGE=2;
|
|
while(GetLocalInt(oMod,"nHenchConv"+IntToString(nAGE))==TRUE&&nAGE<10)
|
|
{ // find unused conversation
|
|
nAGE++;
|
|
} // find unused conversation
|
|
if (nAGE<10&&GetLocalInt(oMod,"nHenchConv"+IntToString(nAGE))==FALSE)
|
|
{ // found one
|
|
nC=nAGE;
|
|
} // found one
|
|
else if (nEvil==FALSE) { // use evil conversation
|
|
nC=1;
|
|
nEvil=TRUE;
|
|
} // use evil conversation
|
|
} // traverse in order
|
|
SetLocalInt(oMod,"nHenchConv"+IntToString(nC),TRUE);
|
|
}
|
|
SetLocalInt(oHench,"nHenchConv",nC);
|
|
nL++;
|
|
} // place henchmen
|
|
}
|