Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
189 lines
6.4 KiB
Plaintext
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;
|
|
}
|