PRC8/nwn/nwnprc/trunk/scripts/prc_dradis.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

295 lines
16 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Dragon Disciple Immunities
//:: prc_dradis.nss
//::///////////////////////////////////////////////
/*
Applies a variety of immunities to the multiple dragon disciple types.
*/
//:://////////////////////////////////////////////
//:: Created By: Silver
//:: Created On: Apr 27, 2005
//:://////////////////////////////////////////////
#include "prc_inc_natweap"
#include "prc_ip_srcost"
#include "pnp_shft_poly"
#include "prc_compan_inc"
//Adds total elemental immunity for the majority of dragon types.
void ElImmune(object oPC ,object oSkin ,int bResisEle ,int iType)
{
DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyDamageImmunity(iType,bResisEle),oSkin));
}
//Adds poison immunity for certain dragon types.
//also adds immunity to level drain for shadow dragons.
void PoisImmu(object oPC ,object oSkin ,int bResisEle ,int pImmune)
{
DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyImmunityMisc(pImmune),oSkin));
}
//Adds disease immunity for certain dragon types.
void DisImmu(object oPC ,object oSkin ,int bResisEle ,int dImmune)
{
DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyImmunityMisc(dImmune),oSkin));
}
//Adds specific spell immunities for certain dragon types.
void SpellImmu(object oPC ,object oSkin ,int bResisEle ,int iSpell)
{
DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertySpellImmunitySpecific(iSpell),oSkin));
}
//Adds more spell immunities for certain dragon types.
void SpellImmu2(object oPC ,object oSkin ,int bResisEle ,int iSpel2)
{
DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertySpellImmunitySpecific(iSpel2),oSkin));
}
//Adds resistance 10 to cold and fire damage.
void SmallResist(object oPC ,object oSkin ,int bResisEle ,int sResis)
{
DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_FIRE,sResis),oSkin));
DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD,sResis),oSkin));
}
//Adds immunity 50% to sonic and fire damage.
void LargeResist(object oPC ,object oSkin ,int bResisEle ,int lResis)
{
DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyDamageImmunity(IP_CONST_DAMAGETYPE_FIRE,lResis),oSkin));
DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyDamageImmunity(IP_CONST_DAMAGETYPE_SONIC,lResis),oSkin));
}
//Adds Spell Resistance of 20+Level to all Dragon Disciples at level 18.
void SpellResis(object oPC ,object oSkin ,int nLevel)
{
int nSR = 20+nLevel;
nSR = GetSRByValue(nSR);
DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyBonusSpellResistance(nSR),oSkin));
}
//Adds True Seeing to all Dragon Disciples at level 20.
void SeeTrue(object oPC ,object oSkin ,int nLevel)
{
if(GetPRCSwitch(PRC_PNP_TRUESEEING))
{
effect eSight = EffectSeeInvisible();
int nSpot = GetPRCSwitch(PRC_PNP_TRUESEEING_SPOT_BONUS);
if(nSpot == 0)
nSpot = 15;
effect eSpot = EffectSkillIncrease(SKILL_SPOT, nSpot);
effect eUltra = EffectUltravision();
eSight = EffectLinkEffects(eSight, eSpot);
eSight = EffectLinkEffects(eSight, eUltra);
eSight = SupernaturalEffect(eSight);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSight, oPC);
}
else
DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyTrueSeeing(),oSkin));
}
void main()
{
//Declare main variables.
object oPC = OBJECT_SELF;
object oSkin = GetPCSkin(oPC);
//Elemental Immunities for various dragon types.
int iType = GetHasFeat(FEAT_BLACK_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_ACID :
GetHasFeat(FEAT_BROWN_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_ACID :
GetHasFeat(FEAT_COPPER_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_ACID :
GetHasFeat(FEAT_GREEN_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_ACID :
GetHasFeat(FEAT_BRASS_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_FIRE :
GetHasFeat(FEAT_GOLD_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_FIRE :
GetHasFeat(FEAT_RED_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_FIRE :
GetHasFeat(FEAT_LUNG_WANG_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_FIRE :
GetHasFeat(FEAT_BATTLE_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_SONIC :
GetHasFeat(FEAT_EMERALD_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_SONIC :
GetHasFeat(FEAT_HOWLING_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_SONIC :
GetHasFeat(FEAT_BLUE_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_ELECTRICAL :
GetHasFeat(FEAT_BRONZE_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_ELECTRICAL :
GetHasFeat(FEAT_OCEANUS_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_ELECTRICAL :
GetHasFeat(FEAT_SAPPHIRE_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_ELECTRICAL :
GetHasFeat(FEAT_SONG_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_ELECTRICAL :
GetHasFeat(FEAT_SHEN_LUNG_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_ELECTRICAL :
GetHasFeat(FEAT_CRYSTAL_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_COLD :
GetHasFeat(FEAT_TOPAZ_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_COLD :
GetHasFeat(FEAT_SILVER_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_COLD :
GetHasFeat(FEAT_WHITE_DRAGON, oPC) ? IP_CONST_DAMAGETYPE_COLD :
-1; // If none match, make the itemproperty invalid
int lResis = GetHasFeat(FEAT_PYROCLASTIC_DRAGON, oPC) ? IP_CONST_DAMAGEIMMUNITY_50_PERCENT :
-1; // If none match, make the itemproperty invalid
//Random Immunities for various Dragon types.
int pImmune = GetHasFeat(FEAT_AMETHYST_DRAGON, oPC) ? IP_CONST_IMMUNITYMISC_POISON :
GetHasFeat(FEAT_SONG_DRAGON, oPC) ? IP_CONST_IMMUNITYMISC_POISON :
GetHasFeat(FEAT_STYX_DRAGON, oPC) ? IP_CONST_IMMUNITYMISC_POISON :
GetHasFeat(FEAT_SHEN_LUNG_DRAGON, oPC) ? IP_CONST_IMMUNITYMISC_POISON :
GetHasFeat(FEAT_SHADOW_DRAGON, oPC) ? IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN :
-1; // If none match, make the itemproperty invalid
int dImmune = GetHasFeat(FEAT_STYX_DRAGON, oPC) ? IP_CONST_IMMUNITYMISC_DISEASE :
-1; // If none match, make the itemproperty invalid
int iSpell = GetHasFeat(FEAT_DEEP_DRAGON, oPC) ? IP_CONST_IMMUNITYSPELL_CHARM_PERSON_OR_ANIMAL :
GetHasFeat(FEAT_CHAOS_DRAGON, oPC) ? IP_CONST_IMMUNITYSPELL_CONFUSION :
GetHasFeat(FEAT_TIEN_LUNG_DRAGON, oPC) ? SPELL_DROWN :
GetHasFeat(FEAT_LUNG_WANG_DRAGON, oPC) ? SPELL_DROWN :
GetHasFeat(FEAT_CHIANG_LUNG_DRAGON, oPC) ? SPELL_DROWN :
GetHasFeat(FEAT_PAN_LUNG_DRAGON, oPC) ? SPELL_DROWN :
GetHasFeat(FEAT_SHEN_LUNG_DRAGON, oPC) ? SPELL_DROWN :
GetHasFeat(FEAT_TUN_MI_LUNG_DRAGON, oPC) ? SPELL_DROWN :
GetHasFeat(FEAT_YU_LUNG_DRAGON, oPC) ? SPELL_DROWN :
-1; // If none match, make the itemproperty invalid
int iSpel2 = GetHasFeat(FEAT_TIEN_LUNG_DRAGON, oPC) ? SPELL_MASS_DROWN :
GetHasFeat(FEAT_LUNG_WANG_DRAGON, oPC) ? SPELL_MASS_DROWN :
GetHasFeat(FEAT_CHIANG_LUNG_DRAGON, oPC) ? SPELL_MASS_DROWN :
GetHasFeat(FEAT_PAN_LUNG_DRAGON, oPC) ? SPELL_MASS_DROWN :
GetHasFeat(FEAT_SHEN_LUNG_DRAGON, oPC) ? SPELL_MASS_DROWN :
GetHasFeat(FEAT_TUN_MI_LUNG_DRAGON, oPC) ? SPELL_MASS_DROWN :
GetHasFeat(FEAT_YU_LUNG_DRAGON, oPC) ? SPELL_MASS_DROWN :
-1; // If none match, make the itemproperty invalid
int sResis = GetHasFeat(FEAT_DEEP_DRAGON, oPC) ? IP_CONST_DAMAGERESIST_10 :
-1; // If none match, make the itemproperty invalid
int sCale1 = GetHasFeat(FAST_HEALING_1,oPC);
int sCale2 = GetHasFeat(FAST_HEALING_2,oPC);
int nWingType = GetHasFeat(FEAT_BLACK_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_BLACK :
GetHasFeat(FEAT_BLUE_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_BLUE :
GetHasFeat(FEAT_AMETHYST_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_BLUE :
GetHasFeat(FEAT_SAPPHIRE_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_BLUE :
GetHasFeat(FEAT_TOPAZ_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_BLUE :
GetHasFeat(FEAT_BRASS_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_BRASS :
GetHasFeat(FEAT_BRONZE_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_BRONZE :
GetHasFeat(FEAT_COPPER_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_COPPER :
GetHasFeat(FEAT_GOLD_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_GOLD :
GetHasFeat(FEAT_GREEN_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_GREEN :
GetHasFeat(FEAT_EMERALD_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_GREEN :
GetHasFeat(FEAT_SILVER_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_SILVER :
GetHasFeat(FEAT_CRYSTAL_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_SILVER :
GetHasFeat(FEAT_WHITE_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_WHITE :
GetHasFeat(FEAT_RED_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_RED :
GetHasFeat(FEAT_BATTLE_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_COPPER2 :
GetHasFeat(FEAT_CHAOS_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_COPPER2 :
GetHasFeat(FEAT_FANG_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_COPPER2 :
GetHasFeat(FEAT_HOWLING_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_COPPER2 :
GetHasFeat(FEAT_BROWN_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_BRONZE2 :
GetHasFeat(FEAT_DEEP_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_BRONZE2 :
GetHasFeat(FEAT_RUST_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_BRONZE2 :
GetHasFeat(FEAT_ETHEREAL_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_WHITE2 :
GetHasFeat(FEAT_OCEANUS_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_BLUE2 :
GetHasFeat(FEAT_SONG_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_BLUE2 :
GetHasFeat(FEAT_PYROCLASTIC_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_RED2 :
GetHasFeat(FEAT_RADIANT_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_GOLD2 :
GetHasFeat(FEAT_SHADOW_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_BLACK2 :
GetHasFeat(FEAT_STYX_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_GREEN2 :
GetHasFeat(FEAT_TARTIAN_DRAGON, oPC) ? PRC_WING_TYPE_DRAGON_SILVER2 :
PRC_WING_TYPE_DRAGON_RED;
int nTailType = GetHasFeat(FEAT_BLACK_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_BLACK :
GetHasFeat(FEAT_SHADOW_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_BLACK :
GetHasFeat(FEAT_BLUE_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_BLUE :
GetHasFeat(FEAT_AMETHYST_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_BLUE :
GetHasFeat(FEAT_SAPPHIRE_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_BLUE :
GetHasFeat(FEAT_TOPAZ_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_BLUE :
GetHasFeat(FEAT_OCEANUS_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_BLUE :
GetHasFeat(FEAT_SONG_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_BLUE :
GetHasFeat(FEAT_BRASS_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_BRASS :
GetHasFeat(FEAT_BRONZE_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_BRONZE :
GetHasFeat(FEAT_BROWN_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_BRONZE :
GetHasFeat(FEAT_DEEP_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_BRONZE :
GetHasFeat(FEAT_RUST_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_BRONZE :
GetHasFeat(FEAT_COPPER_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_COPPER :
GetHasFeat(FEAT_BATTLE_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_COPPER :
GetHasFeat(FEAT_CHAOS_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_COPPER :
GetHasFeat(FEAT_FANG_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_COPPER :
GetHasFeat(FEAT_HOWLING_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_COPPER :
GetHasFeat(FEAT_GOLD_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_GOLD :
GetHasFeat(FEAT_RADIANT_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_GOLD :
GetHasFeat(FEAT_GREEN_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_GREEN :
GetHasFeat(FEAT_EMERALD_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_GREEN :
GetHasFeat(FEAT_STYX_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_GREEN :
GetHasFeat(FEAT_SILVER_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_SILVER :
GetHasFeat(FEAT_CRYSTAL_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_SILVER :
GetHasFeat(FEAT_TARTIAN_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_SILVER :
GetHasFeat(FEAT_WHITE_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_WHITE :
GetHasFeat(FEAT_ETHEREAL_DRAGON, oPC) ? PRC_TAIL_TYPE_DRAGON_WHITE :
PRC_TAIL_TYPE_DRAGON_RED;
int nLevel = GetLevelByClass(CLASS_TYPE_DRAGON_DISCIPLE,oPC);
//natural weapons
//bite at level 2
//2 claws at level 2
//2 wing slam at level 12
//tail slam at level 17
if(nLevel >= 2)
{
int nSize = PRCGetCreatureSize(oPC);
if(GetHasFeat(DRACONIC_BITE, oPC))
{
string sResRef = "prc_rdd_bite_";
sResRef += GetAffixForSize(nSize);
AddNaturalSecondaryWeapon(oPC, sResRef);
//claw here
sResRef = "prc_claw_1d6l_";
sResRef += GetAffixForSize(nSize);
AddNaturalPrimaryWeapon(oPC, sResRef, 2);
}
if(GetHasFeat(DRACONIC_WINGSLAMS, oPC))
{
string sResRef = "prc_rdd_wing_";
sResRef += GetAffixForSize(nSize);
if(nSize >= CREATURE_SIZE_MEDIUM)
AddNaturalSecondaryWeapon(oPC, sResRef, 2);
}
if(GetHasFeat(DRACONIC_TAILSLAP, oPC))
{
string sResRef = "prc_rdd_tail_";
sResRef += GetAffixForSize(nSize);
if(nSize >= CREATURE_SIZE_LARGE)
AddNaturalSecondaryWeapon(oPC, sResRef);
}
}
/*int thickScale = -1;
if(GetHasFeat(DRACONIC_ARMOR_AUG_2,oPC))
thickScale = 2;
else if(GetHasFeat(DRACONIC_ARMOR_AUG_1,oPC))
thickScale = 1;
SetCompositeBonus(oSkin, "ScaleThicken", thickScale, ITEM_PROPERTY_AC_BONUS);*/
int bResisEle = GetHasFeat(FEAT_DRACONIC_IMMUNITY, oPC) ? IP_CONST_DAMAGEIMMUNITY_100_PERCENT : 0;
if (bResisEle>0) ElImmune(oPC,oSkin,bResisEle,iType);
if (bResisEle>0) PoisImmu(oPC,oSkin,bResisEle,pImmune);
if (bResisEle>0) DisImmu(oPC,oSkin,bResisEle,dImmune);
if (bResisEle>0) SpellImmu(oPC,oSkin,bResisEle,iSpell);
if (bResisEle>0) SpellImmu2(oPC,oSkin,bResisEle,iSpel2);
if (bResisEle>0) SmallResist(oPC,oSkin,bResisEle,sResis);
if (bResisEle>0) LargeResist(oPC,oSkin,bResisEle,lResis);
if (nLevel>17) SpellResis(oPC,oSkin,nLevel);
if (nLevel>16 && GetPersistantLocalInt(oPC, "DragonDiscipleTailApplied") == 0)
{
SetPersistantLocalInt(oPC, "DragonDiscipleTailApplied", 1);
SetCreatureTailType(nTailType, oPC);
}
//if (nLevel>8) DelayCommand(1.0f, SetCreatureWingType(nWingType, oPC));
if (nLevel>8)
{
//we don't use default RDD wings to make sure this will work
if(GetCreatureWingType(oPC) == CREATURE_WING_TYPE_DRAGON)
SetCreatureWingType(nWingType, oPC);
}
if (nLevel>19) SeeTrue(oPC,oSkin,nLevel);
//dragon disciple lichs get (almost) draco-lich wings and bony tail at lich 4 ;)
if(nLevel>8 && GetLevelByClass(CLASS_TYPE_LICH, oPC) >= 4) SetCreatureWingType(PRC_WING_TYPE_DRAGON_BRONZE2, oPC);
if(nLevel>16 && GetLevelByClass(CLASS_TYPE_LICH, oPC) >= 4) SetCreatureTailType(CREATURE_TAIL_TYPE_BONE, oPC);
}