2025/05/19 Update
Updated baseclass feat 2das for Hobgoblin Warsoul. Added baseclass marker feats for Sublime Chord. Updated RHD caster races with informational spellcasting marker feat. Updated inc_utility for Fochlucan Lyrist's Bardic Knowledge. Added Spellblast debug text. Made more progress on prc_getbest_inc MultisummonPresummon fix by TiredByFirelight
This commit is contained in:
@@ -1614,6 +1614,7 @@ int GetSkill(object oObject, int nSkill, int bSynergy = FALSE, int bSize = FALSE
|
||||
if(GetHasFeat(FEAT_BARDIC_KNOWLEDGE, oObject))
|
||||
nSkillMod += GetLevelByClass(CLASS_TYPE_BARD, oObject)
|
||||
+GetLevelByClass(CLASS_TYPE_HARPER, oObject)
|
||||
+GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oObject)
|
||||
+GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oObject);
|
||||
break;
|
||||
case SKILL_MOVE_SILENTLY:
|
||||
|
@@ -83,6 +83,7 @@ void DoSpellBlast(object oPC, int bHit)
|
||||
//override PRCDoMeleeTouchAttack() - we already know that blast hit
|
||||
ActionDoCommand(SetLocalInt(oPC, "AttackHasHit", bHit));
|
||||
SetLocalInt(oPC, "EldritchSpellBlast", TRUE);
|
||||
if(DEBUG) DoDebug("inv_inc_blast >> EldritchSpellBlast Set");
|
||||
ActionCastSpell(nSpellID, 0, nDC, 0, METAMAGIC_NONE, nCastingClass, FALSE, bTargetOverride);
|
||||
ActionDoCommand(DeleteLocalInt(oPC, "AttackHasHit"));
|
||||
DelayCommand(0.5, DeleteLocalInt(oPC, "EldritchSpellBlast"));
|
||||
|
@@ -4642,6 +4642,7 @@ const int FEAT_SHADOWMIND_MANIFEST_WILDER = 18171;
|
||||
const int FEAT_SOULCASTER_MANIFEST_WILDER = 18172;
|
||||
|
||||
//:: Racial caster marker feats
|
||||
const int FEAT_MONSTROUS_SPELLCASTING_WARSOUL = 18199;
|
||||
const int FEAT_FEY_SPELLCASTING_GLOURA = 18200;
|
||||
const int FEAT_ABERRATION_SPELLCASTING_DRIDER = 18201;
|
||||
const int FEAT_MONSTROUS_SPELLCASTING_ARKAMOI = 18202;
|
||||
@@ -5427,6 +5428,18 @@ const int FEAT_WAYFARER_SPELLCASTING_SUBLIME_CHORD = 18945;
|
||||
const int FEAT_WILDMAGE_SPELLCASTING_SUBLIME_CHORD = 18946;
|
||||
const int FEAT_WWOC_SPELLCASTING_SUBLIME_CHORD = 18947;
|
||||
|
||||
const int FEAT_SUBLIME_CHORD_SPELLCASTING_ABERRATION = 19605;
|
||||
const int FEAT_SUBLIME_CHORD_SPELLCASTING_FEY = 19606;
|
||||
const int FEAT_SUBLIME_CHORD_SPELLCASTING_MONSTROUS = 19607;
|
||||
const int FEAT_SUBLIME_CHORD_SPELLCASTING_OUTSIDER = 19608;
|
||||
const int FEAT_SUBLIME_CHORD_SPELLCASTING_SHAPECHANGER = 19609;
|
||||
const int FEAT_SUBLIME_CHORD_SPELLCASTING_BARD = 19610;
|
||||
const int FEAT_SUBLIME_CHORD_SPELLCASTING_BEGUILER = 19611;
|
||||
const int FEAT_SUBLIME_CHORD_SPELLCASTING_DUSKBLADE = 19612;
|
||||
const int FEAT_SUBLIME_CHORD_SPELLCASTING_SORCERER = 19613;
|
||||
const int FEAT_SUBLIME_CHORD_SPELLCASTING_WARMAGE = 19614;
|
||||
const int FEAT_SUBLIME_CHORD_SPELLCASTING_WIZARD = 19615;
|
||||
|
||||
//:: Suel Archanamach marker feats
|
||||
const int FEAT_ABCHAMP_SPELLCASTING_SUEL_ARCHANAMACH = 18948;
|
||||
const int FEAT_AOTS_SPELLCASTING_SUEL_ARCHANAMACH = 18949;
|
||||
|
@@ -58,6 +58,12 @@ int GetBestL0Spell(object oTarget, int nFallbackSpell)
|
||||
return nSpell;
|
||||
} */
|
||||
|
||||
/*
|
||||
|
||||
bscureObject
|
||||
|
||||
*/
|
||||
|
||||
int GetBestL1Spell(object oTarget, int nSpell)
|
||||
{
|
||||
if(PRCGetHasSpell(SPELL_MAGIC_MISSILE, oTarget)) return SPELL_MAGIC_MISSILE;
|
||||
@@ -88,12 +94,15 @@ int GetBestL1Spell(object oTarget, int nSpell)
|
||||
if(PRCGetHasSpell(SPELL_ENTROPIC_SHIELD, oTarget)) return SPELL_ENTROPIC_SHIELD;
|
||||
if(PRCGetHasSpell(SPELL_ENTANGLE, oTarget)) return SPELL_ENTANGLE;
|
||||
if(PRCGetHasSpell(SPELL_DIVINE_FAVOR, oTarget)) return SPELL_DIVINE_FAVOR;
|
||||
if(PRCGetHasSpell(SPELL_FEAR, oTarget)) return SPELL_FEAR;
|
||||
if(PRCGetHasSpell(SPELL_SLEEP, oTarget)) return SPELL_SLEEP;
|
||||
if(PRCGetHasSpell(SPELL_SORROW, oTarget)) return SPELL_SORROW;
|
||||
if(PRCGetHasSpell(SPELL_MAGIC_WEAPON, oTarget)) return SPELL_MAGIC_WEAPON;
|
||||
if(PRCGetHasSpell(SPELL_SCARE, oTarget)) return SPELL_SCARE;
|
||||
if(PRCGetHasSpell(SPELL_GREASE, oTarget)) return SPELL_GREASE;
|
||||
if(PRCGetHasSpell(SPELL_CAMOFLAGE, oTarget)) return SPELL_CAMOFLAGE;
|
||||
if(PRCGetHasSpell(SPELL_COLOR_SPRAY, oTarget)) return SPELL_COLOR_SPRAY;
|
||||
if(PRCGetHasSpell(SPELL_RAY_OF_HOPE, oTarget)) return SPELL_RAY_OF_HOPE;
|
||||
if(PRCGetHasSpell(SPELL_RESIST_ELEMENTS, oTarget)) return SPELL_RESIST_ELEMENTS;
|
||||
if(PRCGetHasSpell(SPELL_REMOVE_FEAR, oTarget)) return SPELL_REMOVE_FEAR;
|
||||
if(PRCGetHasSpell(SPELL_IRONGUTS, oTarget)) return SPELL_IRONGUTS;
|
||||
@@ -103,7 +112,10 @@ int GetBestL1Spell(object oTarget, int nSpell)
|
||||
if(PRCGetHasSpell(SPELL_PROTECTION_FROM_EVIL, oTarget)) return SPELL_PROTECTION_FROM_EVIL;
|
||||
if(PRCGetHasSpell(SPELL_IDENTIFY, oTarget)) return SPELL_IDENTIFY;
|
||||
if(PRCGetHasSpell(SPELL_CURE_LIGHT_WOUNDS, oTarget)) return SPELL_CURE_LIGHT_WOUNDS;
|
||||
if(PRCGetHasSpell(SPELL_INFLICT_LIGHT_WOUNDS, oTarget)) return SPELL_INFLICT_LIGHT_WOUNDS;
|
||||
if(PRCGetHasSpell(SPELL_INFLICT_LIGHT_WOUNDS, oTarget)) return SPELL_INFLICT_LIGHT_WOUNDS;
|
||||
if(PRCGetHasSpell(SPELL_EXTRACT_DRUG, oTarget)) return SPELL_EXTRACT_DRUG;
|
||||
if(PRCGetHasSpell(SPELL_OBSCURE_OBJECT, oTarget)) return SPELL_OBSCURE_OBJECT;
|
||||
if(PRCGetHasSpell(2839, oTarget)) return 2839; //:: Disguise Self
|
||||
return nSpell;
|
||||
}
|
||||
|
||||
@@ -388,4 +400,5 @@ int GetBestAvailableSpell(object oTarget)
|
||||
if(nBestSpell == 99999) nBestSpell = GetBestL1Spell(oTarget, nBestSpell);
|
||||
if(nBestSpell == 99999) nBestSpell = GetBestL0Spell(oTarget, nBestSpell);
|
||||
return nBestSpell;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1850,7 +1850,30 @@ void DoCorruptionCost(object oPC, int nAbility, int nCost, int bDrain)
|
||||
ApplyAbilityDamage(oPC, nAbility, nCost, DURATION_TYPE_TEMPORARY, TRUE, -1.0f);
|
||||
}
|
||||
|
||||
//:: Fix by TiredByFirelight
|
||||
void MultisummonPreSummon(object oPC = OBJECT_SELF, int bOverride = FALSE)
|
||||
{
|
||||
if(!GetPRCSwitch(PRC_MULTISUMMON) && !bOverride)
|
||||
return;
|
||||
int nCount = GetPRCSwitch(PRC_MULTISUMMON);
|
||||
if(bOverride)
|
||||
nCount = bOverride;
|
||||
if(nCount < 0
|
||||
|| nCount == 1)
|
||||
nCount = 99;
|
||||
if(nCount > 99)
|
||||
nCount = 99;
|
||||
|
||||
object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC, nCount);
|
||||
if(!GetIsObjectValid(oSummon) && !GetLocalInt(oSummon, "RFSummonedElemental"))
|
||||
{
|
||||
oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC, 1);
|
||||
AssignCommand(oSummon, SetIsDestroyable(FALSE, FALSE, FALSE));
|
||||
AssignCommand(oSummon, DelayCommand(0.3, SetIsDestroyable(TRUE, FALSE, FALSE)));
|
||||
}
|
||||
}
|
||||
|
||||
/* void MultisummonPreSummon(object oPC = OBJECT_SELF, int bOverride = FALSE)
|
||||
{
|
||||
if(!GetPRCSwitch(PRC_MULTISUMMON) && !bOverride)
|
||||
return;
|
||||
@@ -1871,7 +1894,7 @@ void MultisummonPreSummon(object oPC = OBJECT_SELF, int bOverride = FALSE)
|
||||
i++;
|
||||
oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC, i);
|
||||
}
|
||||
}
|
||||
} */
|
||||
|
||||
|
||||
//This function returns 1 only if the object oTarget is the object
|
||||
|
@@ -1380,7 +1380,10 @@ int BardSorcPrCCheck(object oCaster, int nCastingClass, object oSpellCastItem)
|
||||
|
||||
// Eldritch Spellblast was breaking otherwise
|
||||
if (GetLocalInt(oCaster, "EldritchSpellBlast"))
|
||||
{
|
||||
if(DEBUG) DoDebug("x2_inc_spellhook >> EldritchSpellBlast Found");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
//check its a sorc spell
|
||||
if(nCastingClass == CLASS_TYPE_SORCERER)
|
||||
|
Reference in New Issue
Block a user