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