PRC8_fork/nwn/nwnprc/trunk/psionics/psi_shadowmind.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

107 lines
4.2 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Shadowmind
//:: psi_shadowmind.nss
//:://////////////////////////////////////////////
//:: Adds the powers to the Shadowmind
//:://////////////////////////////////////////////
//:: Created By: Stratovarius
//:: Created On: March 6, 2006
//:://////////////////////////////////////////////
#include "psi_inc_powknown"
int GetPowerRowID(int nClass, int nPower)
{
string sPowerFile = GetAMSDefinitionFileName(nClass);
int nCheck = -1;
int i;
for(i = 0; i < GetPRCSwitch(FILE_END_CLASS_POWER) ; i++)
{
nCheck = StringToInt(Get2DACache(sPowerFile, "RealSpellID", i));
// Find the row ID of the power we need and return it
if(nCheck == nPower)
{
return i;
}
}
// this should never trigger
return -1;
}
void main()
{
object oPC = OBJECT_SELF;
int nClass = GetPrimaryPsionicClass(oPC);
int nPowerTotal = GetKnownPowersModifier(oPC, nClass);
// Determine why this script is running
if(GetRunningEvent() != EVENT_ONPLAYERLEVELDOWN)
{
// Adding Distract if the Shadowmind is level 1 in the class or greater
if (GetLevelByClass(CLASS_TYPE_SHADOWMIND,oPC) >= 1 &&
!GetPersistantLocalInt(oPC, "PRC_Shadowmind_DistractGained")
)
{
if(DEBUG) DoDebug("psi_shadowmind: Adding Distract");
AddPowerKnown(oPC, nClass, GetPowerRowID(nClass, POWER_DISTRACT), TRUE, GetHitDice(oPC));
SetKnownPowersModifier(oPC, nClass, ++nPowerTotal);
SetPersistantLocalInt(oPC, "PRC_Shadowmind_DistractGained", TRUE);
}
// Adding Cloud Mind if the Shadowmind is level 3 in the class or greater
if (GetLevelByClass(CLASS_TYPE_SHADOWMIND,oPC) >= 3 &&
!GetPersistantLocalInt(oPC, "PRC_Shadowmind_CloudMindGained")
)
{
if(DEBUG) DoDebug("psi_shadowmind: Adding Cloud Mind");
AddPowerKnown(oPC, nClass, GetPowerRowID(nClass, POWER_CLOUD_MIND), TRUE, GetHitDice(oPC));
SetKnownPowersModifier(oPC, nClass, ++nPowerTotal);
SetPersistantLocalInt(oPC, "PRC_Shadowmind_CloudMindGained", TRUE);
}
// Adding Cloud Mind, Mass if the Shadowmind is level 3 in the class or greater
if (GetLevelByClass(CLASS_TYPE_SHADOWMIND,oPC) >= 9 &&
!GetPersistantLocalInt(oPC, "PRC_Shadowmind_CloudMindMassGained")
)
{
if(DEBUG) DoDebug("psi_shadowmind: Adding Cloud Mind, Mass");
AddPowerKnown(oPC, nClass, GetPowerRowID(nClass, POWER_CLOUD_MIND_MASS), TRUE, GetHitDice(oPC));
SetKnownPowersModifier(oPC, nClass, ++nPowerTotal);
SetPersistantLocalInt(oPC, "PRC_Shadowmind_CloudMindMassGained", TRUE);
}
// Hook to OnLevelDown to remove the power slots granted here
AddEventScript(oPC, EVENT_ONPLAYERLEVELDOWN, "psi_shadowmind", TRUE, FALSE);
}
else
{
// Has lost Distract, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_Shadowmind_DistractGained") &&
GetLevelByClass(CLASS_TYPE_SHADOWMIND,oPC) < 1
)
{
DeletePersistantLocalInt(oPC, "PRC_Shadowmind_DistractGained");
SetKnownPowersModifier(oPC, nClass, --nPowerTotal);
}
// Has lost Cloud Mind, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_Shadowmind_CloudMindGained") &&
GetLevelByClass(CLASS_TYPE_SHADOWMIND,oPC) < 3
)
{
DeletePersistantLocalInt(oPC, "PRC_Shadowmind_CloudMindGained");
SetKnownPowersModifier(oPC, nClass, --nPowerTotal);
}
// Has lost Cloud Mind, Mass, but the slot is still present
if(GetPersistantLocalInt(oPC, "PRC_Shadowmind_CloudMindMassGained") &&
GetLevelByClass(CLASS_TYPE_SHADOWMIND,oPC) < 9
)
{
DeletePersistantLocalInt(oPC, "PRC_Shadowmind_CloudMindMassGained");
SetKnownPowersModifier(oPC, nClass, --nPowerTotal);
}
// Remove eventhook if the character no longer has levels in Shadowmind
if(GetLevelByClass(CLASS_TYPE_SHADOWMIND,oPC) == 0)
RemoveEventScript(oPC, EVENT_ONPLAYERLEVELDOWN, "psi_shadowmind", TRUE, FALSE);
}
}