Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a192bca40e |
@@ -498,6 +498,7 @@ effect EffectFatigue(){
|
|||||||
effect eReturn = EffectAbilityDecrease(ABILITY_STRENGTH, 2);
|
effect eReturn = EffectAbilityDecrease(ABILITY_STRENGTH, 2);
|
||||||
eReturn = EffectLinkEffects(eReturn, EffectAbilityDecrease(ABILITY_DEXTERITY, 2));
|
eReturn = EffectLinkEffects(eReturn, EffectAbilityDecrease(ABILITY_DEXTERITY, 2));
|
||||||
eReturn = EffectLinkEffects(eReturn, EffectMovementSpeedDecrease(25));
|
eReturn = EffectLinkEffects(eReturn, EffectMovementSpeedDecrease(25));
|
||||||
|
eReturn = EffectLinkEffects(eReturn, EffectIcon(EFFECT_ICON_FATIGUE));
|
||||||
eReturn = TagEffect(eReturn, "PRCFatigue");
|
eReturn = TagEffect(eReturn, "PRCFatigue");
|
||||||
return eReturn;
|
return eReturn;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,7 +76,7 @@
|
|||||||
|
|
||||||
/* This variable MUST be updated with every new version of the PRC!!! */
|
/* 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!!! */
|
/* This variable MUST be updated every time 'assemble_spellbooks.bat' is run!!! */
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
*/
|
*/
|
||||||
//:://////////////////////////////////////////////
|
//:://////////////////////////////////////////////
|
||||||
//:://////////////////////////////////////////////
|
//:://////////////////////////////////////////////
|
||||||
|
#include "prc_inc_spells"
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
/* Constants */
|
/* Constants */
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
@@ -572,32 +572,49 @@ int GetMaxPowerCount(object oCreature, int nList)
|
|||||||
|
|
||||||
int GetHasPower(int nPower, object oCreature = OBJECT_SELF)
|
int GetHasPower(int nPower, object oCreature = OBJECT_SELF)
|
||||||
{
|
{
|
||||||
// Check MISC list first (for Hidden Talent and similar feats)
|
// Debug output
|
||||||
if(GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_INVALID), oCreature))
|
if (DEBUG) DoDebug("GetHasPower: Checking power " + IntToString(nPower));
|
||||||
return TRUE;
|
|
||||||
|
// 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)
|
if((GetLevelByClass(CLASS_TYPE_PSION, oCreature)
|
||||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSION), oCreature)
|
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSION), oCreature)
|
||||||
) ||
|
) ||
|
||||||
(GetLevelByClass(CLASS_TYPE_PSYWAR, oCreature)
|
(GetLevelByClass(CLASS_TYPE_PSYWAR, oCreature)
|
||||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSYWAR), oCreature)
|
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSYWAR), oCreature)
|
||||||
) ||
|
) ||
|
||||||
(GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oCreature)
|
(GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oCreature)
|
||||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSYCHIC_ROGUE), oCreature)
|
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSYCHIC_ROGUE), oCreature)
|
||||||
) ||
|
) ||
|
||||||
(GetLevelByClass(CLASS_TYPE_WILDER, oCreature)
|
(GetLevelByClass(CLASS_TYPE_WILDER, oCreature)
|
||||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_WILDER), oCreature)
|
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_WILDER), oCreature)
|
||||||
) ||
|
) ||
|
||||||
(GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oCreature)
|
(GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oCreature)
|
||||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_FIST_OF_ZUOKEN), oCreature)
|
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_FIST_OF_ZUOKEN), oCreature)
|
||||||
) ||
|
) ||
|
||||||
(GetLevelByClass(CLASS_TYPE_WARMIND, oCreature)
|
(GetLevelByClass(CLASS_TYPE_WARMIND, oCreature)
|
||||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_WARMIND), oCreature)
|
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_WARMIND), oCreature)
|
||||||
)
|
)
|
||||||
// add new psionic classes here
|
// add new psionic classes here
|
||||||
)
|
)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
return FALSE;
|
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
string DebugListKnownPowers(object oCreature)
|
string DebugListKnownPowers(object oCreature)
|
||||||
|
|||||||
@@ -166,23 +166,36 @@ void main()
|
|||||||
string sFeatID;
|
string sFeatID;
|
||||||
int added = 0;
|
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));
|
nPowerLevel = StringToInt(Get2DACache("spells", "Innate", i));
|
||||||
if(nPowerLevel > nMaxLevel)
|
if(nPowerLevel > nMaxLevel)
|
||||||
break;
|
continue;
|
||||||
|
|
||||||
string sName = GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", i)));
|
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 (GetHasPower(i, oMeldshaper))
|
if (!bHasPower && GetIsSubradialSpell(i))
|
||||||
{
|
{
|
||||||
if(SORT) AddToTempList(oMeldshaper, sName, i);
|
// For subradials, check if they know the master spell
|
||||||
else AddChoice(sName, i, oMeldshaper);
|
int nMasterSpell = GetMasterSpellFromSubradial(i);
|
||||||
added++;
|
if (nMasterSpell != -1)
|
||||||
}
|
{
|
||||||
}
|
bHasPower = GetHasPower(nMasterSpell, oMeldshaper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bHasPower)
|
||||||
|
{
|
||||||
|
if(SORT) AddToTempList(oMeldshaper, sName, i);
|
||||||
|
else AddChoice(sName, i, oMeldshaper);
|
||||||
|
added++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(SORT)
|
if(SORT)
|
||||||
|
|||||||
@@ -287,16 +287,44 @@ void main()
|
|||||||
}
|
}
|
||||||
///////////////////////////Draconic Senses//////////////////////////
|
///////////////////////////Draconic Senses//////////////////////////
|
||||||
if(GetHasFeat(FEAT_DRACONIC_SENSES, oPC))
|
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)
|
switch(nPower)
|
||||||
{
|
{
|
||||||
case 1: IPSafeAddItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_FEAT_LOWLIGHT_VISION), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); break;
|
case 1:
|
||||||
case 2: IPSafeAddItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_FEAT_LOWLIGHT_VISION), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); break;
|
case 2:
|
||||||
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
|
if(DEBUG) DoDebug("Draconic Senses Branch Case 1 & 2: Lowlight vision");
|
||||||
default: IPSafeAddItemProperty(oSkin, ItemPropertyDarkvision(), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
//IPSafeAddItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_FEAT_LOWLIGHT_VISION), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); break;
|
||||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, ExtraordinaryEffect(EffectUltravision()), oPC); 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_Spot", nPower, ITEM_PROPERTY_SKILL_BONUS, SKILL_SPOT);
|
||||||
SetCompositeBonus(oSkin, "DS_Search", nPower, ITEM_PROPERTY_SKILL_BONUS, SKILL_SEARCH);
|
SetCompositeBonus(oSkin, "DS_Search", nPower, ITEM_PROPERTY_SKILL_BONUS, SKILL_SEARCH);
|
||||||
SetCompositeBonus(oSkin, "DS_Listen", nPower, ITEM_PROPERTY_SKILL_BONUS, SKILL_LISTEN);
|
SetCompositeBonus(oSkin, "DS_Listen", nPower, ITEM_PROPERTY_SKILL_BONUS, SKILL_LISTEN);
|
||||||
|
|||||||
Reference in New Issue
Block a user