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:
Jaysyn904
2025-05-19 22:47:21 -04:00
parent 76475dba2b
commit 404ea74cc7
85 changed files with 36347 additions and 28609 deletions

View File

@@ -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:

View File

@@ -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"));

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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

View File

@@ -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)