133 lines
3.9 KiB
Plaintext
133 lines
3.9 KiB
Plaintext
//
|
|
// 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;
|
|
}
|