Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a192bca40e |
@@ -498,6 +498,7 @@ effect EffectFatigue(){
|
||||
effect eReturn = EffectAbilityDecrease(ABILITY_STRENGTH, 2);
|
||||
eReturn = EffectLinkEffects(eReturn, EffectAbilityDecrease(ABILITY_DEXTERITY, 2));
|
||||
eReturn = EffectLinkEffects(eReturn, EffectMovementSpeedDecrease(25));
|
||||
eReturn = EffectLinkEffects(eReturn, EffectIcon(EFFECT_ICON_FATIGUE));
|
||||
eReturn = TagEffect(eReturn, "PRCFatigue");
|
||||
return eReturn;
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
|
||||
/* This variable MUST be updated with every new version of the PRC!!! */
|
||||
|
||||
const string PRC_VERSION = "PRC8 4.79";
|
||||
const string PRC_VERSION = "PRC8 4.80";
|
||||
|
||||
/* This variable MUST be updated every time 'assemble_spellbooks.bat' is run!!! */
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_inc_spells"
|
||||
//////////////////////////////////////////////////
|
||||
/* Constants */
|
||||
//////////////////////////////////////////////////
|
||||
@@ -572,32 +572,49 @@ int GetMaxPowerCount(object oCreature, int nList)
|
||||
|
||||
int GetHasPower(int nPower, object oCreature = OBJECT_SELF)
|
||||
{
|
||||
// Check MISC list first (for Hidden Talent and similar feats)
|
||||
if(GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_INVALID), oCreature))
|
||||
return TRUE;
|
||||
// Debug output
|
||||
if (DEBUG) DoDebug("GetHasPower: Checking power " + IntToString(nPower));
|
||||
|
||||
if((GetLevelByClass(CLASS_TYPE_PSION, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSION), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_PSYWAR, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSYWAR), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSYCHIC_ROGUE), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_WILDER, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_WILDER), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_FIST_OF_ZUOKEN), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_WARMIND, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_WARMIND), oCreature)
|
||||
)
|
||||
// add new psionic classes here
|
||||
)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
// Check if it's a subradial spell first
|
||||
if (GetIsSubradialSpell(nPower))
|
||||
{
|
||||
if(DEBUG) DoDebug("GetHasPower: " + IntToString(nPower) + " is a subradial");
|
||||
int nMasterSpell = GetMasterSpellFromSubradial(nPower);
|
||||
if (nMasterSpell != -1)
|
||||
{
|
||||
if(DEBUG) DoDebug("GetHasPower: Master spell is " + IntToString(nMasterSpell));
|
||||
nPower = nMasterSpell;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Check MISC list first (for Hidden Talent and similar feats)
|
||||
if(GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_INVALID), oCreature))
|
||||
return TRUE;
|
||||
|
||||
if((GetLevelByClass(CLASS_TYPE_PSION, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSION), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_PSYWAR, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSYWAR), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSYCHIC_ROGUE), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_WILDER, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_WILDER), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_FIST_OF_ZUOKEN), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_WARMIND, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_WARMIND), oCreature)
|
||||
)
|
||||
// add new psionic classes here
|
||||
)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
string DebugListKnownPowers(object oCreature)
|
||||
|
||||
@@ -166,23 +166,36 @@ void main()
|
||||
string sFeatID;
|
||||
int added = 0;
|
||||
|
||||
for(i = 14001; i < 14260 ; i++)
|
||||
for(i = 14001; i < 14351 ; i++)
|
||||
{
|
||||
// Skip blank IDs between 14266 and 14329
|
||||
if(i >= 14266 && i < 14330)
|
||||
continue;
|
||||
|
||||
nPowerLevel = StringToInt(Get2DACache("spells", "Innate", i));
|
||||
if(nPowerLevel > nMaxLevel)
|
||||
break;
|
||||
continue;
|
||||
|
||||
string sName = GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", i)));
|
||||
|
||||
if(sName != "")
|
||||
// Check if it's a regular power or a subradial
|
||||
int bHasPower = GetHasPower(i, oMeldshaper);
|
||||
if (!bHasPower && GetIsSubradialSpell(i))
|
||||
{
|
||||
if (GetHasPower(i, oMeldshaper))
|
||||
// For subradials, check if they know the master spell
|
||||
int nMasterSpell = GetMasterSpellFromSubradial(i);
|
||||
if (nMasterSpell != -1)
|
||||
{
|
||||
if(SORT) AddToTempList(oMeldshaper, sName, i);
|
||||
else AddChoice(sName, i, oMeldshaper);
|
||||
added++;
|
||||
bHasPower = GetHasPower(nMasterSpell, oMeldshaper);
|
||||
}
|
||||
}
|
||||
|
||||
if (bHasPower)
|
||||
{
|
||||
if(SORT) AddToTempList(oMeldshaper, sName, i);
|
||||
else AddChoice(sName, i, oMeldshaper);
|
||||
added++;
|
||||
}
|
||||
}
|
||||
|
||||
if(SORT)
|
||||
|
||||
@@ -288,15 +288,43 @@ void main()
|
||||
///////////////////////////Draconic Senses//////////////////////////
|
||||
if(GetHasFeat(FEAT_DRACONIC_SENSES, oPC))
|
||||
{
|
||||
effect eLow = EffectBonusFeat(FEAT_DARKVISION);
|
||||
effect eDark = EffectBonusFeat(FEAT_LOWLIGHTVISION);
|
||||
//effect eUltra = EffectUltravision();
|
||||
effect eUltra = EffectBonusFeat(FEAT_ULTRAVISION);
|
||||
effect eLink;
|
||||
|
||||
if(DEBUG) DoDebug("Entering Draconic Senses Branch. nPower is: "+IntToString(nPower)+".");
|
||||
switch(nPower)
|
||||
{
|
||||
case 1: IPSafeAddItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_FEAT_LOWLIGHT_VISION), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); break;
|
||||
case 2: IPSafeAddItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_FEAT_LOWLIGHT_VISION), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); break;
|
||||
case 3: IPSafeAddItemProperty(oSkin, ItemPropertyDarkvision(), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); break;
|
||||
//Using Ultravision as the ability is Blindsense, not Blindsight
|
||||
default: IPSafeAddItemProperty(oSkin, ItemPropertyDarkvision(), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, ExtraordinaryEffect(EffectUltravision()), oPC); break;
|
||||
case 1:
|
||||
case 2:
|
||||
{
|
||||
if(DEBUG) DoDebug("Draconic Senses Branch Case 1 & 2: Lowlight vision");
|
||||
//IPSafeAddItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_FEAT_LOWLIGHT_VISION), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); break;
|
||||
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, UnyieldingEffect(eLow), oPC);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
if(DEBUG) DoDebug("Draconic Senses Branch Case 3: Lowlight vision + Darkvision");
|
||||
//IPSafeAddItemProperty(oSkin, ItemPropertyDarkvision(), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); break;
|
||||
eLink = EffectLinkEffects(eLow, eDark);
|
||||
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, UnyieldingEffect(eLink), oPC);
|
||||
break;
|
||||
}
|
||||
//;: Using Ultravision as the ability is Blindsense, not Blindsight
|
||||
default:
|
||||
{
|
||||
if(DEBUG) DoDebug("Draconic Senses Branch Default: Lowlight vision + Darkvision + Ultravsion");
|
||||
//IPSafeAddItemProperty(oSkin, ItemPropertyDarkvision(), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
||||
eLink = EffectLinkEffects(eLow, eDark);
|
||||
eLink = EffectLinkEffects(eUltra, eLink);
|
||||
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, UnyieldingEffect(eLink), oPC);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(DEBUG) DoDebug("Draconic Senses: Adding skill bonuses.");
|
||||
SetCompositeBonus(oSkin, "DS_Spot", nPower, ITEM_PROPERTY_SKILL_BONUS, SKILL_SPOT);
|
||||
SetCompositeBonus(oSkin, "DS_Search", nPower, ITEM_PROPERTY_SKILL_BONUS, SKILL_SEARCH);
|
||||
SetCompositeBonus(oSkin, "DS_Listen", nPower, ITEM_PROPERTY_SKILL_BONUS, SKILL_LISTEN);
|
||||
|
||||
Reference in New Issue
Block a user