PRC8/nwn/nwnprc/trunk/include/prc_inc_dragsham.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

189 lines
6.4 KiB
Plaintext

// Metabreath Feats - Not implemented yet.
/** const int FEAT_CLINGING_BREATH = 5000;
const int FEAT_LINGERING_BREATH = 5001;
const int FEAT_ENLARGE_BREATH = 5002;
const int FEAT_HEIGHTEN_BREATH = 5003;
const int FEAT_MAXIMIZE_BREATH = 5004;
const int FEAT_QUICKEN_BREATH = 5005;
const int FEAT_RECOVER_BREATH = 5006;
const int FEAT_SHAPE_BREATH = 5007;
const int FEAT_SPLIT_BREATH = 5008;
const int FEAT_SPREADING_BREATH = 5009;
const int FEAT_EXTEND_SPREADING_BREATH = 5010;
const int FEAT_TEMPEST_BREATH = 5011; **/
// Dragon Shaman Aura flag
//const int DRAGON_SHAMAN_AURA_ACTIVE = 5000;
#include "prc_inc_nwscript"
int GetIsDragonblooded(object oPC);
// returns the damage type of dragon that the PC has a totem for. Checks for the presence of the
// various feats that are present indicating such. This is necessary for determining the type
// of breath weapon and the type of damage immunity.
int GetDragonDamageType(int nTotem);
// Used to create a flag on the caster and store the Aura currently being run.
//int StartDragonShamanAura(object oCaster, int nSpellId);
// Resets the available ToV points; for use after rest or on enter.
void ResetTouchOfVitality(object oPC);
// Applies any metabreath feats that the dragon shaman may have to his breathweapon
//int ApplyMetaBreathFeatMods( int nDuration, object oCaster );
int GetIsDragonblooded(object oPC)
{
int nRace = GetRacialType(oPC);
if(nRace == RACIAL_TYPE_KOBOLD
|| nRace == RACIAL_TYPE_SPELLSCALE
|| nRace == RACIAL_TYPE_DRAGONBORN
|| nRace == RACIAL_TYPE_STONEHUNTER_GNOME
|| nRace == RACIAL_TYPE_SILVERBROW_HUMAN
|| nRace == RACIAL_TYPE_FORESTLORD_ELF
|| nRace == RACIAL_TYPE_FIREBLOOD_DWARF
|| nRace == RACIAL_TYPE_GLIMMERSKIN_HALFING
|| nRace == RACIAL_TYPE_FROSTBLOOD_ORC
|| nRace == RACIAL_TYPE_SUNSCORCH_HOBGOBLIN
|| nRace == RACIAL_TYPE_VILETOOTH_LIZARDFOLK)
return TRUE;
if(GetLevelByClass(CLASS_TYPE_DRAGON_DISCIPLE, oPC) > 9)
return TRUE;
if(GetHasFeat(FEAT_DRAGONTOUCHED, oPC)
|| GetHasFeat(FEAT_DRACONIC_DEVOTEE, oPC)
|| GetHasFeat(FEAT_DRAGON, oPC)
|| GetHasFeat(DRAGON_BLOODED, oPC))
return TRUE;
//Draconic Heritage qualifies for dragonblood
if(GetHasFeat(FEAT_DRACONIC_HERITAGE_BK, oPC)
|| GetHasFeat(FEAT_DRACONIC_HERITAGE_BL, oPC)
|| GetHasFeat(FEAT_DRACONIC_HERITAGE_GR, oPC)
|| GetHasFeat(FEAT_DRACONIC_HERITAGE_RD, oPC)
|| GetHasFeat(FEAT_DRACONIC_HERITAGE_WH, oPC)
|| GetHasFeat(FEAT_DRACONIC_HERITAGE_AM, oPC)
|| GetHasFeat(FEAT_DRACONIC_HERITAGE_CR, oPC)
|| GetHasFeat(FEAT_DRACONIC_HERITAGE_EM, oPC)
|| GetHasFeat(FEAT_DRACONIC_HERITAGE_SA, oPC)
|| GetHasFeat(FEAT_DRACONIC_HERITAGE_TP, oPC)
|| GetHasFeat(FEAT_DRACONIC_HERITAGE_BS, oPC)
|| GetHasFeat(FEAT_DRACONIC_HERITAGE_BZ, oPC)
|| GetHasFeat(FEAT_DRACONIC_HERITAGE_CP, oPC)
|| GetHasFeat(FEAT_DRACONIC_HERITAGE_GD, oPC)
|| GetHasFeat(FEAT_DRACONIC_HERITAGE_SR, oPC))
return TRUE;
return FALSE;
}
int GetDragonDamageType(int nTotem)
{
int nDamageType = nTotem == FEAT_DRAGONSHAMAN_BLACK ? DAMAGE_TYPE_ACID:
nTotem == FEAT_DRAGONSHAMAN_BLUE ? DAMAGE_TYPE_ELECTRICAL:
nTotem == FEAT_DRAGONSHAMAN_BRASS ? DAMAGE_TYPE_FIRE:
nTotem == FEAT_DRAGONSHAMAN_BRONZE ? DAMAGE_TYPE_ELECTRICAL:
nTotem == FEAT_DRAGONSHAMAN_COPPER ? DAMAGE_TYPE_ACID:
nTotem == FEAT_DRAGONSHAMAN_GOLD ? DAMAGE_TYPE_FIRE:
nTotem == FEAT_DRAGONSHAMAN_GREEN ? DAMAGE_TYPE_ACID:
nTotem == FEAT_DRAGONSHAMAN_RED ? DAMAGE_TYPE_FIRE:
nTotem == FEAT_DRAGONSHAMAN_SILVER ? DAMAGE_TYPE_COLD:
nTotem == FEAT_DRAGONSHAMAN_WHITE ? DAMAGE_TYPE_COLD:
-1;
return nDamageType;
}
void ResetTouchOfVitality(object oPC)
{
if(GetHasFeat(FEAT_DRAGONSHAMAN_TOUCHVITALITY, oPC))
{
int nChaBonus = GetAbilityModifier(ABILITY_CHARISMA, oPC);
if(nChaBonus < 0) nChaBonus = 0;
int nVitPoints = 2 * GetLevelByClass(CLASS_TYPE_DRAGON_SHAMAN, oPC) * nChaBonus;
SetLocalInt(oPC, "DRAGON_SHAMAN_TOUCH_REMAIN", nVitPoints);
string sMes = "Healing power: " + IntToString(nVitPoints) + " points.";
FloatingTextStringOnCreature(sMes, oPC, FALSE);
}
if(GetHasFeat(FEAT_ABERRANT_DURABLE_FORM, oPC))
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectTemporaryHitpoints(GetAberrantFeatCount(oPC)), oPC);
}
int GetMarshalAuraPower(object oPC)
{
int iMarshalLevel = GetLevelByClass(CLASS_TYPE_MARSHAL, oPC);
int nBonus;
if(iMarshalLevel > 19)
nBonus = iMarshalLevel / 5;
else if(iMarshalLevel > 13)
nBonus = 3;
else if(iMarshalLevel > 6)
nBonus = 2;
else if(iMarshalLevel > 1)
nBonus = 1;
return nBonus;
}
int GetDragonShamanAuraPower(object oPC)
{
int iDragonShamanLevel = GetLevelByClass(CLASS_TYPE_DRAGON_SHAMAN, oPC);
int nBonus = (iDragonShamanLevel / 5) + 1;
return nBonus;
}
int GetExtraAuraPower(object oPC)
{
int nBonus;
if(GetIsDragonblooded(oPC))
{
int nHD = GetHitDice(oPC);
if(nHD > 19)
nBonus = 4;
else if(nHD > 13)
nBonus = 3;
else if(nHD > 6)
nBonus = 2;
else
nBonus = 1;
}
return nBonus;
}
int GetAuraBonus(object oPC)
{
int nAuraBonus = GetDragonShamanAuraPower(oPC);
int nMarshalBonus = GetMarshalAuraPower(oPC);
int nExtraBonus = GetExtraAuraPower(oPC);
if(nMarshalBonus > nAuraBonus)
nAuraBonus = nMarshalBonus;
if(nExtraBonus > nAuraBonus)
nAuraBonus = nExtraBonus;
return nAuraBonus;
}
object GetAuraObject(object oShaman, string sTag)
{
location lTarget = GetLocation(oShaman);
object oAura = GetFirstObjectInShape(SHAPE_SPHERE, 1.0f, lTarget, FALSE, OBJECT_TYPE_AREA_OF_EFFECT);
while(GetIsObjectValid(oAura))
{
if((GetAreaOfEffectCreator(oAura) == oShaman) //was cast by shaman
&& GetTag(oAura) == sTag //it's a draconic aura
&& !GetLocalInt(oAura, "SpellID")) //and was not setup before
{
return oAura;
}
oAura = GetNextObjectInShape(SHAPE_SPHERE, 1.0f, lTarget, FALSE, OBJECT_TYPE_AREA_OF_EFFECT);
}
return OBJECT_INVALID;
}