//
// Spawn Check - PCs
//
int ParseFlagValue(string sName, string sFlag, int nDigits, int nDefault);
int ParseSubFlagValue(string sName, string sFlag, int nDigits, string sSubFlag, int nSubDigits, int nDefault);
object GetChildByTag(object oSpawn, string sChildTag);
object GetChildByNumber(object oSpawn, int nChildNum);
object GetSpawnByID(int nSpawnID);
void DeactivateSpawn(object oSpawn);
void DeactivateSpawnsByTag(string sSpawnTag);
void DeactivateAllSpawns();
void DespawnChildren(object oSpawn);
void DespawnChildrenByTag(object oSpawn, string sSpawnTag);
//
//
int SpawnCheckPCs(object oSpawn)
{
    // Initialize Values
    object oPC;
    object oArea = GetArea(oSpawn);
    string sSpawnName = GetLocalString(oSpawn, "f_Flags");
    location lSpawn = GetLocation(oSpawn);
    int nCheckPCs = GetLocalInt(oSpawn, "f_SpawnCheckPCs");
    float fCheckPCsRadius = GetLocalFloat(oSpawn, "f_CheckPCsRadius");

    // Block Spawn by Default
    int nProcessSpawn = FALSE;

    // Cycle through PCs
    if (fCheckPCsRadius > -1.0)
    {
        oPC = GetFirstObjectInShape(SHAPE_SPHERE, fCheckPCsRadius, lSpawn, FALSE, OBJECT_TYPE_CREATURE);
    }
    else
    {
        oPC = GetFirstObjectInArea(oArea);
    }
    while (oPC != OBJECT_INVALID)
    {
        if (GetIsPC(oPC) == TRUE)
        {

//
// Only Make Modifications Between These Lines
// -------------------------------------------


            // Check 00
            if (nCheckPCs == 0)
            {
                // Example, Allow Spawn
                nProcessSpawn = TRUE;
            }
            //

            // Spawn with a Skill Check
            if (nCheckPCs == 1)
            {
                // Get Current Number of Children
                int nSpawnCount = GetLocalInt(oSpawn, "SpawnCount");

                if (nSpawnCount == 0)
                {
                    // DC of Hidden Placeable
                    int nItemDC = 20;

                    // Player's Skill
                    int nSkill = GetSkillRank(SKILL_SEARCH, oPC);

                    // Do Skill Check
                    int nDCCheck = d20() + nSkill;
                    if (nDCCheck >= nItemDC)
                    {
                        // Placeable Spotted!
                        string sSpotted = "You notice a thingamathingy!";
                        FloatingTextStringOnCreature(sSpotted, oPC, TRUE);
                        //Spawn it!
                        nProcessSpawn = TRUE;
                    }
                }
            }
            //

            // Spawn Based on Journal Quest Entry
            if (nCheckPCs == 1)
            {
                // Check Journal Quest Entry
                int nQuest = GetLocalInt(oPC, "NW_JOURNAL_ENTRYQuest1");
                if (nQuest == 1)
                {
                    // Quest Entry is 1, Spawn!
                    nProcessSpawn = TRUE;
                }
            }
            //

            // Spawn Based on Item in PC Inventory
            if (nCheckPCs == 2)
            {
                // Check Player for Item
                object oItem = GetFirstItemInInventory(oPC);
                while (oItem != OBJECT_INVALID)
                {
                    if (GetTag(oItem) == "MysticKey")
                    {
                        // Item Found, Spawn!
                        nProcessSpawn = TRUE;
                    }
                    oItem = GetNextItemInInventory(oPC);
                }
            }
            //


// -------------------------------------------
// Only Make Modifications Between These Lines
//
        }
        // Retreive Next PC
        if (fCheckPCsRadius > -1.0)
        {
            oPC = GetNextObjectInShape(SHAPE_SPHERE, fCheckPCsRadius, lSpawn, FALSE, OBJECT_TYPE_CREATURE);
        }
        else
        {
            oPC = GetNextObjectInArea(oArea);
        }
    }

    // Return whether Spawn can Proceed
    return nProcessSpawn;
}
