2025/05/20 Update
Fixed Samurai CW's TWF blocker, again. Dragon Mantle should have regen. Got Gloura working with Bard at 1st lvl. Got the other RHD casters working with Sorcerer at 1st lvl. Sublime Chord advances bard (or other classes) *caster level* not spell slots.
This commit is contained in:
parent
404ea74cc7
commit
04e5393f7c
@ -329,6 +329,72 @@ string GetFileForClass(int nClass)
|
||||
}
|
||||
|
||||
int GetSpellslotLevel(int nClass, object oPC)
|
||||
{
|
||||
int nBaseLevel = GetLevelByClass(nClass, oPC);
|
||||
|
||||
// Custom racial casting
|
||||
int nRacialLevel = 0;
|
||||
int nRace = GetRacialType(oPC);
|
||||
|
||||
if (nClass == CLASS_TYPE_SORCERER)
|
||||
{
|
||||
if(nRace == RACIAL_TYPE_RAKSHASA)
|
||||
nRacialLevel = GetLevelByClass(CLASS_TYPE_OUTSIDER, oPC);
|
||||
else if(nRace == RACIAL_TYPE_ARKAMOI)
|
||||
nRacialLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC);
|
||||
else if(nRace == RACIAL_TYPE_DRIDER)
|
||||
nRacialLevel = GetLevelByClass(CLASS_TYPE_ABERRATION, oPC);
|
||||
else if(nRace == RACIAL_TYPE_REDSPAWN_ARCANISS)
|
||||
nRacialLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC) * 3 / 4;
|
||||
else if(nRace == RACIAL_TYPE_MARRUTACT)
|
||||
nRacialLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC) * 6 / 7;
|
||||
else if(nRace == RACIAL_TYPE_HOBGOBLIN_WARSOUL)
|
||||
nRacialLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC);
|
||||
else if(nRace == RACIAL_TYPE_ARANEA)
|
||||
nRacialLevel = GetLevelByClass(CLASS_TYPE_SHAPECHANGER, oPC);
|
||||
}
|
||||
else if (nClass == CLASS_TYPE_BARD && nRace == RACIAL_TYPE_GLOURA)
|
||||
{
|
||||
nRacialLevel = GetLevelByClass(CLASS_TYPE_FEY, oPC);
|
||||
}
|
||||
|
||||
// Add base and racial class levels
|
||||
int nLevel = nBaseLevel + nRacialLevel;
|
||||
|
||||
// Spellcasting PRC progression
|
||||
int nArcSpellslotLevel = 0;
|
||||
int nDivSpellslotLevel = 0;
|
||||
int i;
|
||||
for(i = 1; i <= 8; i++)
|
||||
{
|
||||
int nTempClass = GetClassByPosition(i, oPC);
|
||||
int nArcSpellMod = StringToInt(Get2DACache("classes", "ArcSpellLvlMod", nTempClass));
|
||||
int nDivSpellMod = StringToInt(Get2DACache("classes", "DivSpellLvlMod", nTempClass));
|
||||
|
||||
if(nArcSpellMod > 0)
|
||||
nArcSpellslotLevel += (GetLevelByClass(nTempClass, oPC) + (nArcSpellMod - 1)) / nArcSpellMod;
|
||||
|
||||
if(nDivSpellMod > 0)
|
||||
nDivSpellslotLevel += (GetLevelByClass(nTempClass, oPC) + (nDivSpellMod - 1)) / nDivSpellMod;
|
||||
}
|
||||
|
||||
// Add PRC spellcasting progression
|
||||
if(GetPrimaryArcaneClass(oPC) == nClass)
|
||||
nLevel += nArcSpellslotLevel;
|
||||
if(GetPrimaryDivineClass(oPC) == nClass)
|
||||
nLevel += nDivSpellslotLevel;
|
||||
|
||||
// Ultimate Magus override (only include Sorcerer + UM)
|
||||
if (nClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oPC))
|
||||
{
|
||||
nLevel = GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oPC) + GetLevelByClass(CLASS_TYPE_SORCERER, oPC);
|
||||
}
|
||||
|
||||
if(DEBUG) DoDebug("GetSpellslotLevel(" + IntToString(nClass) + ", " + GetName(oPC) + ") = " + IntToString(nLevel));
|
||||
return nLevel;
|
||||
}
|
||||
|
||||
/* int GetSpellslotLevel(int nClass, object oPC)
|
||||
{
|
||||
int nLevel = GetLevelByClass(nClass, oPC);
|
||||
|
||||
@ -336,33 +402,59 @@ int GetSpellslotLevel(int nClass, object oPC)
|
||||
if(nClass == CLASS_TYPE_SORCERER && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_RAKSHASA)
|
||||
nLevel = GetLevelByClass(CLASS_TYPE_OUTSIDER, oPC);
|
||||
|
||||
if(nClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_RAKSHASA)
|
||||
nLevel = GetLevelByClass(CLASS_TYPE_OUTSIDER, oPC) + GetLevelByClass(CLASS_TYPE_SORCERER, oPC);
|
||||
|
||||
//:: Arkamoi cast as sorcerers
|
||||
else if(nClass == CLASS_TYPE_SORCERER && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_ARKAMOI)
|
||||
nLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC);
|
||||
|
||||
if(nClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_ARKAMOI)
|
||||
nLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC) + GetLevelByClass(CLASS_TYPE_SORCERER, oPC);
|
||||
|
||||
//:: Driders cast as sorcerers
|
||||
else if(nClass == CLASS_TYPE_SORCERER && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_DRIDER)
|
||||
nLevel = GetLevelByClass(CLASS_TYPE_ABERRATION, oPC);
|
||||
|
||||
if(nClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_DRIDER)
|
||||
nLevel = GetLevelByClass(CLASS_TYPE_ABERRATION, oPC) + GetLevelByClass(CLASS_TYPE_SORCERER, oPC);
|
||||
|
||||
//:: Redspawn Arcaniss cast as 3/4 sorcerers
|
||||
else if(nClass == CLASS_TYPE_SORCERER && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_REDSPAWN_ARCANISS)
|
||||
nLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC)*3/4;
|
||||
|
||||
else if(nClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_REDSPAWN_ARCANISS)
|
||||
nLevel = GetLevelByClass(CLASS_TYPE_SORCERER, oPC) + (GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC)*3/4);
|
||||
|
||||
//:: Marrutact cast as 6/7 sorcerers
|
||||
else if(nClass == CLASS_TYPE_SORCERER && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_MARRUTACT)
|
||||
nLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC)*6/7;
|
||||
|
||||
else if(nClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_MARRUTACT)
|
||||
nLevel = GetLevelByClass(CLASS_TYPE_SORCERER, oPC) + (GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC)*6/7);
|
||||
|
||||
//:: Hobgoblin Warsouls cast as sorcerers
|
||||
else if(nClass == CLASS_TYPE_SORCERER && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_HOBGOBLIN_WARSOUL)
|
||||
nLevel = GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC);
|
||||
|
||||
else if(nClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_HOBGOBLIN_WARSOUL)
|
||||
nLevel = GetLevelByClass(CLASS_TYPE_SORCERER, oPC) + GetLevelByClass(CLASS_TYPE_MONSTROUS, oPC);
|
||||
|
||||
//:: Aranea cast as sorcerers
|
||||
else if(nClass == CLASS_TYPE_SORCERER && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_ARANEA)
|
||||
nLevel = GetLevelByClass(CLASS_TYPE_SHAPECHANGER, oPC);
|
||||
|
||||
else if(nClass == CLASS_TYPE_SORCERER && GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_ARANEA)
|
||||
nLevel = GetLevelByClass(CLASS_TYPE_SHAPECHANGER, oPC) + GetLevelByClass(CLASS_TYPE_SORCERER, oPC);
|
||||
|
||||
//:: Gloura cast as bards
|
||||
else if(nClass == CLASS_TYPE_BARD && !GetLevelByClass(CLASS_TYPE_BARD, oPC) && GetRacialType(oPC) == RACIAL_TYPE_GLOURA)
|
||||
nLevel = GetLevelByClass(CLASS_TYPE_FEY, oPC);
|
||||
|
||||
//:: Aranea cast as sorcerers
|
||||
else if(nClass == CLASS_TYPE_SORCERER && !GetLevelByClass(CLASS_TYPE_SORCERER, oPC) && GetRacialType(oPC) == RACIAL_TYPE_ARANEA)
|
||||
nLevel = GetLevelByClass(CLASS_TYPE_SHAPECHANGER, oPC);
|
||||
else if(nClass == CLASS_TYPE_BARD && GetLevelByClass(CLASS_TYPE_BARD, oPC) && GetRacialType(oPC) == RACIAL_TYPE_GLOURA)
|
||||
{
|
||||
nLevel = GetLevelByClass(CLASS_TYPE_FEY, oPC) + GetLevelByClass(CLASS_TYPE_BARD, oPC);
|
||||
}
|
||||
|
||||
int nArcSpellslotLevel;
|
||||
int nDivSpellslotLevel;
|
||||
@ -373,9 +465,9 @@ int GetSpellslotLevel(int nClass, object oPC)
|
||||
//spellcasting prc
|
||||
int nArcSpellMod = StringToInt(Get2DACache("classes", "ArcSpellLvlMod", nTempClass));
|
||||
int nDivSpellMod = StringToInt(Get2DACache("classes", "DivSpellLvlMod", nTempClass));
|
||||
/*//special case for combat medic class
|
||||
if(nTempClass == CLASS_TYPE_COMBAT_MEDIC && (nClass == CLASS_TYPE_BARD || nClass == CLASS_TYPE_WITCH))
|
||||
nArcSpellMod = 1;*/
|
||||
//special case for combat medic class
|
||||
//if(nTempClass == CLASS_TYPE_COMBAT_MEDIC && (nClass == CLASS_TYPE_BARD || nClass == CLASS_TYPE_WITCH))
|
||||
// nArcSpellMod = 1;
|
||||
|
||||
if(nArcSpellMod == 1)
|
||||
nArcSpellslotLevel += GetLevelByClass(nTempClass, oPC);
|
||||
@ -399,6 +491,7 @@ int GetSpellslotLevel(int nClass, object oPC)
|
||||
if(DEBUG) DoDebug("GetSpellslotLevel(" + IntToString(nClass) + ", " + GetName(oPC) + ") = " + IntToString(nLevel));
|
||||
return nLevel;
|
||||
}
|
||||
*/
|
||||
|
||||
int GetItemBonusSlotCount(object oPC, int nClass, int nSpellLevel)
|
||||
{
|
||||
|
@ -5936,7 +5936,7 @@ int GetFirstDivineClassPosition(object oCaster = OBJECT_SELF)
|
||||
|
||||
int GetPrimaryArcaneClass(object oCaster = OBJECT_SELF)
|
||||
{
|
||||
int nClass;
|
||||
int nClass = CLASS_TYPE_INVALID;
|
||||
|
||||
if(GetPRCSwitch(PRC_CASTERLEVEL_FIRST_CLASS_RULE))
|
||||
{
|
||||
@ -5947,7 +5947,9 @@ int GetPrimaryArcaneClass(object oCaster = OBJECT_SELF)
|
||||
}
|
||||
else
|
||||
{
|
||||
int i, nClassTmp, nClassLvl;
|
||||
int nClassLvl = 0;
|
||||
|
||||
int i, nClassTmp;
|
||||
for(i = 1; i <= 8; i++)
|
||||
{
|
||||
nClassTmp = GetClassByPosition(i, oCaster);
|
||||
@ -5972,15 +5974,17 @@ int GetPrimaryArcaneClass(object oCaster = OBJECT_SELF)
|
||||
|| nClass == CLASS_TYPE_MONSTROUS)
|
||||
nClass = CLASS_TYPE_SORCERER;
|
||||
|
||||
if(nClass == CLASS_TYPE_FEY)
|
||||
nClass = CLASS_TYPE_BARD;
|
||||
if(nClass == CLASS_TYPE_FEY && GetRacialType(oCaster) == RACIAL_TYPE_GLOURA)
|
||||
{
|
||||
nClass = CLASS_TYPE_BARD;
|
||||
}
|
||||
|
||||
return nClass;
|
||||
}
|
||||
|
||||
int GetPrimaryDivineClass(object oCaster = OBJECT_SELF)
|
||||
{
|
||||
int nClass;
|
||||
int nClass = CLASS_TYPE_INVALID;
|
||||
|
||||
if(GetPRCSwitch(PRC_CASTERLEVEL_FIRST_CLASS_RULE))
|
||||
{
|
||||
|
@ -31,6 +31,9 @@ Chakra Bind (Totem)
|
||||
Long, draconic wings sprout from the shoulders of your blue dragonhide plate armor.
|
||||
|
||||
You gain +4 on Jump checks for every point of essentia invested in your dragon mantle.
|
||||
|
||||
Fixed by: Jaysyn
|
||||
Fixed on: 2025-05-20 15:27:50
|
||||
*/
|
||||
|
||||
#include "moi_inc_moifunc"
|
||||
@ -39,37 +42,73 @@ void DragonMantleHeal(object oMeldshaper);
|
||||
|
||||
void DragonMantleHeal(object oMeldshaper)
|
||||
{
|
||||
if (GetHasSpellEffect(MELD_DRAGON_MANTLE, oMeldshaper) && GetIsMeldBound(oMeldshaper, MELD_DRAGON_MANTLE) == CHAKRA_HEART)
|
||||
{
|
||||
int nCurHP = GetCurrentHitPoints(oMeldshaper);
|
||||
int nMaxHP = GetMaxHitPoints(oMeldshaper);
|
||||
|
||||
// Is the HP total lower than half?
|
||||
if ((nMaxHP/2) > nCurHP)
|
||||
{
|
||||
if (!GetIsResting(oMeldshaper)) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(GetEssentiaInvested(oMeldshaper, MELD_DRAGON_MANTLE)), oMeldshaper);
|
||||
if (!GetIsResting(oMeldshaper))
|
||||
{
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(GetEssentiaInvested(oMeldshaper, MELD_DRAGON_MANTLE)), oMeldshaper);
|
||||
}
|
||||
else
|
||||
{
|
||||
RemoveEventScript(oMeldshaper, EVENT_ONHEARTBEAT, "moi_mld_drgnmntl", TRUE, FALSE);
|
||||
}
|
||||
}
|
||||
DelayCommand(6.0, DragonMantleHeal(oMeldshaper));
|
||||
}
|
||||
//DelayCommand(6.0, DragonMantleHeal(oMeldshaper));
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
object oMeldshaper = PRCGetSpellTargetObject();
|
||||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||||
//Declare main variables.
|
||||
int nEvent = GetRunningEvent();
|
||||
object oMeldshaper;
|
||||
switch(nEvent)
|
||||
{
|
||||
case EVENT_ONHEARTBEAT: oMeldshaper = OBJECT_SELF; break;
|
||||
|
||||
default:
|
||||
object oMeldshaper = PRCGetSpellTargetObject();
|
||||
}
|
||||
|
||||
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_DRAGON_MANTLE);
|
||||
int nBonus = 3 * nEssentia;
|
||||
|
||||
effect eLink = EffectSavingThrowIncrease(SAVING_THROW_FORT, 2);
|
||||
if (nEssentia)
|
||||
if(nEvent == FALSE)
|
||||
{
|
||||
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_ACID, nBonus));
|
||||
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_COLD, nBonus));
|
||||
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_ELECTRICAL, nBonus));
|
||||
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_FIRE, nBonus));
|
||||
}
|
||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SHOULDERS && nEssentia) eLink = EffectLinkEffects(eLink, EffectDamageReduction(nEssentia, DAMAGE_POWER_PLUS_ONE));
|
||||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM && nEssentia) eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_JUMP, nEssentia * 4));
|
||||
effect eLink = EffectSavingThrowIncrease(SAVING_THROW_FORT, 2);
|
||||
if (nEssentia)
|
||||
{
|
||||
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_ACID, nBonus));
|
||||
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_COLD, nBonus));
|
||||
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_ELECTRICAL, nBonus));
|
||||
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_FIRE, nBonus));
|
||||
}
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||
if (GetIsMeldBound(oMeldshaper, MELD_DRAGON_MANTLE) == CHAKRA_SHOULDERS && nEssentia)
|
||||
{
|
||||
eLink = EffectLinkEffects(eLink, EffectDamageReduction(nEssentia, DAMAGE_POWER_PLUS_ONE));
|
||||
}
|
||||
if (GetIsMeldBound(oMeldshaper, MELD_DRAGON_MANTLE) == CHAKRA_TOTEM && nEssentia)
|
||||
{
|
||||
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_JUMP, nEssentia * 4));
|
||||
}
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
|
||||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||
|
||||
DragonMantleHeal(oMeldshaper);
|
||||
|
||||
AddEventScript(oMeldshaper, EVENT_ONHEARTBEAT, "moi_mld_drgnmntl", TRUE, FALSE);
|
||||
}
|
||||
|
||||
else if(nEvent == EVENT_ONHEARTBEAT)
|
||||
{
|
||||
if (GetHasSpellEffect(MELD_DRAGON_MANTLE, oMeldshaper) && GetIsMeldBound(oMeldshaper, MELD_DRAGON_MANTLE) == CHAKRA_HEART)
|
||||
{
|
||||
DragonMantleHeal(oMeldshaper);
|
||||
}
|
||||
}
|
||||
}
|
@ -74,7 +74,65 @@ void main()
|
||||
}
|
||||
|
||||
// Handle new spellbooks
|
||||
|
||||
void CheckSpellbooks(object oPC)
|
||||
{
|
||||
|
||||
if(GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oPC) > 0)
|
||||
{
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_SUBLIME_CHORD, 4, 9);
|
||||
|
||||
if(GetHasFeat(FEAT_SUBLIME_CHORD_SPELLCASTING_BARD, oPC))
|
||||
{
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_BARD, 0, 3);
|
||||
}
|
||||
if(GetHasFeat(FEAT_SUBLIME_CHORD_SPELLCASTING_SORCERER))
|
||||
{
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_SORCERER, 0, 3);
|
||||
}
|
||||
if(GetHasFeat(FEAT_SUBLIME_CHORD_SPELLCASTING_WARMAGE, oPC))
|
||||
{
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_WARMAGE, 0, 3);
|
||||
}
|
||||
if(GetHasFeat(FEAT_SUBLIME_CHORD_SPELLCASTING_DUSKBLADE, oPC))
|
||||
{
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_DUSKBLADE, 0, 3);
|
||||
}
|
||||
if(GetHasFeat(FEAT_SUBLIME_CHORD_SPELLCASTING_BEGUILER, oPC))
|
||||
{
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_BEGUILER, 0, 3);
|
||||
}
|
||||
}
|
||||
|
||||
// Check all classes that might need a spellbook update
|
||||
if(GetIsRHDSorcerer(oPC)) CheckMissingSpells(oPC, CLASS_TYPE_SORCERER, 0, 9);
|
||||
if(GetIsRHDBard(oPC)) CheckMissingSpells(oPC, CLASS_TYPE_BARD, 0, 6);
|
||||
|
||||
if(!GetPRCSwitch(PRC_BARD_DISALLOW_NEWSPELLBOOK))
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_BARD, 0, 6);
|
||||
if(!GetPRCSwitch(PRC_SORC_DISALLOW_NEWSPELLBOOK))
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_SORCERER, 0, 9);
|
||||
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_SUEL_ARCHANAMACH, 1, 5);
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_FAVOURED_SOUL, 0, 9);
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_WARMAGE, 0, 9);
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_DREAD_NECROMANCER, 1, 9);
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_HEXBLADE, 1, 4);
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_DUSKBLADE, 0, 5);
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_JUSTICEWW, 1, 4);
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_KNIGHT_WEAVE, 1, 6);
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_ARCHIVIST, 0, 9);
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_BEGUILER, 0, 9);
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_HARPER, 1, 3);
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_ASSASSIN, 1, 4);
|
||||
CheckMissingSpells(oPC, CLASS_TYPE_CELEBRANT_SHARESS, 1, 4);
|
||||
|
||||
// Check psionics
|
||||
DelayCommand(0.0f, CheckPsionics(oPC));
|
||||
}
|
||||
|
||||
|
||||
/* void CheckSpellbooks(object oPC)
|
||||
{
|
||||
if(GetIsRHDSorcerer(oPC) && CheckMissingSpells(oPC, CLASS_TYPE_SORCERER, 0, 9))
|
||||
return;
|
||||
@ -121,6 +179,7 @@ void CheckSpellbooks(object oPC)
|
||||
|
||||
DelayCommand(0.0f, CheckPsionics(oPC));
|
||||
}
|
||||
*/
|
||||
|
||||
// Handle psionics
|
||||
void CheckPsionics(object oPC)
|
||||
|
@ -2579,24 +2579,45 @@ int ToB()
|
||||
return TRUE;
|
||||
} */
|
||||
|
||||
if (GetHasFeat(FEAT_IMPROVED_TWO_WEAPON_FIGHTING) && GetPRCSwitch(PRC_35_TWO_WEAPON_FIGHTING) && 17 > GetAbilityScore(OBJECT_SELF, ABILITY_DEXTERITY, TRUE) && !GetLevelByClass(CLASS_TYPE_TEMPEST) &&
|
||||
GetLevelByClass(CLASS_TYPE_RANGER) < 9 && GetLevelByClass(CLASS_TYPE_CW_SAMURAI) < 11)
|
||||
if (GetHasFeat(FEAT_IMPROVED_TWO_WEAPON_FIGHTING)
|
||||
&& GetPRCSwitch(PRC_35_TWO_WEAPON_FIGHTING)
|
||||
&& GetAbilityScore(OBJECT_SELF, ABILITY_DEXTERITY, TRUE) < 17
|
||||
&& !nTempestLevel
|
||||
&& nRangerLevel < 9
|
||||
&& nSamuraiLevel < 11)
|
||||
{
|
||||
FloatingTextStringOnCreature("You must have 17 Dexterity to take Improved Two Weapon Fighting under 3.5 rules", OBJECT_SELF, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* if (GetHasFeat(FEAT_IMPROVED_TWO_WEAPON_FIGHTING) && GetPRCSwitch(PRC_35_TWO_WEAPON_FIGHTING) && 17 > GetAbilityScore(OBJECT_SELF, ABILITY_DEXTERITY, TRUE) && !GetLevelByClass(CLASS_TYPE_TEMPEST) &&
|
||||
GetLevelByClass(CLASS_TYPE_RANGER) < 9 && GetLevelByClass(CLASS_TYPE_CW_SAMURAI) < 11)
|
||||
{
|
||||
FloatingTextStringOnCreature("You must have 17 Dexterity to take Improved Two Weapon Fighting under 3.5 rules", OBJECT_SELF, FALSE);
|
||||
return TRUE;
|
||||
} */
|
||||
|
||||
/* if (GetHasFeat(FEAT_IMPROVED_TWO_WEAPON_FIGHTING) && GetPRCSwitch(PRC_35_TWO_WEAPON_FIGHTING) && 17 > GetAbilityScore(OBJECT_SELF, ABILITY_DEXTERITY, TRUE) && !GetLevelByClass(CLASS_TYPE_TEMPEST) && 9 > !GetLevelByClass(CLASS_TYPE_RANGER))
|
||||
{
|
||||
FloatingTextStringOnCreature("You must have 17 Dexterity to take Improved Two Weapon Fighting under 3.5 rules", OBJECT_SELF, FALSE);
|
||||
return TRUE;
|
||||
} */
|
||||
|
||||
if (GetHasFeat(FEAT_TWO_WEAPON_FIGHTING) && GetPRCSwitch(PRC_35_TWO_WEAPON_FIGHTING) && 15 > GetAbilityScore(OBJECT_SELF, ABILITY_DEXTERITY, TRUE) && !GetLevelByClass(CLASS_TYPE_RANGER) && 2 > !GetLevelByClass(CLASS_TYPE_CW_SAMURAI))
|
||||
if (GetHasFeat(FEAT_TWO_WEAPON_FIGHTING)
|
||||
&& GetPRCSwitch(PRC_35_TWO_WEAPON_FIGHTING)
|
||||
&& GetAbilityScore(OBJECT_SELF, ABILITY_DEXTERITY, TRUE) < 15
|
||||
&& nRangerLevel == 0
|
||||
&& nSamuraiLevel < 2)
|
||||
{
|
||||
FloatingTextStringOnCreature("You must have 15 Dexterity to take Two Weapon Fighting under 3.5 rules", OBJECT_SELF, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* if (GetHasFeat(FEAT_TWO_WEAPON_FIGHTING) && GetPRCSwitch(PRC_35_TWO_WEAPON_FIGHTING) && 15 > GetAbilityScore(OBJECT_SELF, ABILITY_DEXTERITY, TRUE) && !GetLevelByClass(CLASS_TYPE_RANGER) && 2 > !GetLevelByClass(CLASS_TYPE_CW_SAMURAI))
|
||||
{
|
||||
FloatingTextStringOnCreature("You must have 15 Dexterity to take Two Weapon Fighting under 3.5 rules", OBJECT_SELF, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
} */
|
||||
|
||||
if (GetHasFeat(FEAT_AWESOME_BLOW) && _GetSizeForPrereq(OBJECT_SELF) < CREATURE_SIZE_LARGE && !GetHasSpellEffect(MELD_WORMTAIL_BELT, OBJECT_SELF))
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user