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.
134 lines
5.4 KiB
Plaintext
134 lines
5.4 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Warlock
|
|
//:: inv_warlock.nss
|
|
//::///////////////////////////////////////////////
|
|
/*
|
|
Handles the passive bonuses for Warlocks
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Fox
|
|
//:: Created On: Feb 29, 2008
|
|
//:://////////////////////////////////////////////
|
|
|
|
#include "prc_alterations"
|
|
#include "inv_inc_invfunc"
|
|
|
|
// Armour and Shield combined, up to Medium/Large shield.
|
|
/*void ReducedASF(object oCreature, object oSkin)
|
|
{
|
|
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature);
|
|
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCreature);
|
|
int nAC = GetBaseAC(oArmor);
|
|
int iBonus = GetLocalInt(oSkin, "WarlockArmourCasting");
|
|
int nASF = -1;
|
|
itemproperty ip;
|
|
|
|
// First thing is to remove old ASF (in case armor is changed.)
|
|
if (iBonus != -1)
|
|
RemoveSpecificProperty(oSkin, ITEM_PROPERTY_ARCANE_SPELL_FAILURE, -1, iBonus, 1, "WarlockArmourCasting");
|
|
|
|
// As long as they meet the requirements, just give em max ASF reduction
|
|
// I know it could cause problems if they have increased ASF, but thats unlikely
|
|
if (3 >= nAC && GetBaseItemType(oShield) != BASE_ITEM_TOWERSHIELD && GetBaseItemType(oShield) != BASE_ITEM_LARGESHIELD)
|
|
nASF = IP_CONST_ARCANE_SPELL_FAILURE_MINUS_25_PERCENT;
|
|
|
|
// Apply the ASF to the skin.
|
|
ip = ItemPropertyArcaneSpellFailure(nASF);
|
|
|
|
AddItemProperty(DURATION_TYPE_PERMANENT, ip, oSkin);
|
|
SetLocalInt(oSkin, "WarlockArmourCasting", nASF);
|
|
}*/
|
|
|
|
void main()
|
|
{
|
|
object oSkin = GetPCSkin(OBJECT_SELF);
|
|
int nClass = GetLevelByClass(CLASS_TYPE_WARLOCK);
|
|
int nHellFire = GetLevelByClass(CLASS_TYPE_HELLFIRE_WARLOCK);
|
|
int nTheurge = GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE);
|
|
int bMasterOfElements = GetHasFeat(FEAT_MASTER_OF_THE_ELEMENTS) ? IP_CONST_DAMAGERESIST_10 : 0;
|
|
|
|
//ReducedASF(OBJECT_SELF, oSkin);
|
|
|
|
//Reduction
|
|
if(nClass > 2 || nTheurge)
|
|
{
|
|
int nRedAmt = (nClass + 1) / 4;
|
|
nRedAmt += (nTheurge + 2) / 3;
|
|
effect eReduction = EffectDamageReduction(nRedAmt, DAMAGE_POWER_PLUS_THREE);
|
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, ExtraordinaryEffect(eReduction), OBJECT_SELF);
|
|
}
|
|
|
|
if(GetHasFeat(FEAT_WARLOCK_SHADOWMASTER))
|
|
AddSkinFeat(FEAT_WARLOCK_SHADOWMASTER_SHADES, IP_CONST_FEAT_SHADOWMASTER_SHADES, oSkin);
|
|
|
|
if(GetHasFeat(FEAT_PARAGON_VISIONARY))
|
|
{
|
|
int nSkillBonus = max(2 * GetAbilityModifier(ABILITY_WISDOM, OBJECT_SELF), 6);
|
|
effect eLink = EffectLinkEffects(EffectUltravision(), EffectSeeInvisible());
|
|
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_SPOT, nSkillBonus));
|
|
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_LISTEN, nSkillBonus));
|
|
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_SENSE_MOTIVE, nSkillBonus));
|
|
eLink = ExtraordinaryEffect(eLink);
|
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, OBJECT_SELF);
|
|
}
|
|
|
|
//Energy Resistance
|
|
int nResistAmt = nClass >= 20 ? IP_CONST_DAMAGERESIST_10 : IP_CONST_DAMAGERESIST_5;
|
|
|
|
if(GetHasFeat(FEAT_WARLOCK_RESIST_ACID))
|
|
{
|
|
itemproperty ipIP = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID, nResistAmt);
|
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE);
|
|
}
|
|
if(GetHasFeat(FEAT_WARLOCK_RESIST_COLD))
|
|
{
|
|
itemproperty ipIP = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD, nResistAmt);
|
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE);
|
|
}
|
|
if(GetHasFeat(FEAT_WARLOCK_RESIST_ELEC))
|
|
{
|
|
itemproperty ipIP = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ELECTRICAL, nResistAmt);
|
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE);
|
|
}
|
|
if(GetHasFeat(FEAT_WARLOCK_RESIST_SONIC))
|
|
{
|
|
itemproperty ipIP = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_SONIC, nResistAmt);
|
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE);
|
|
}
|
|
|
|
int nFireResist;
|
|
if(GetHasFeat(FEAT_WARLOCK_RESIST_FIRE))
|
|
nFireResist = nResistAmt;
|
|
if(nHellFire > 1)
|
|
nFireResist += IP_CONST_DAMAGERESIST_10;
|
|
if(nFireResist)
|
|
{
|
|
itemproperty ipIP = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_FIRE, nFireResist);
|
|
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE);
|
|
}
|
|
|
|
//Hellfire Warlock
|
|
if(nHellFire)
|
|
{
|
|
if(GetHasInvocation(INVOKE_ELDRITCH_SPEAR))
|
|
AddSkinFeat(FEAT_HELLFIRE_SPEAR, IP_FEAT_HELLFIRE_SPEAR, oSkin);
|
|
|
|
if(GetHasInvocation(INVOKE_ELDRITCH_GLAIVE))
|
|
AddSkinFeat(FEAT_HELLFIRE_GLAIVE, IP_FEAT_HELLFIRE_GLAIVE, oSkin);
|
|
|
|
if(GetHasInvocation(INVOKE_HIDEOUS_BLOW))
|
|
AddSkinFeat(FEAT_HELLFIRE_BLOW, IP_FEAT_HELLFIRE_BLOW, oSkin);
|
|
|
|
if(GetHasInvocation(INVOKE_ELDRITCH_CHAIN))
|
|
AddSkinFeat(FEAT_HELLFIRE_CHAIN, IP_FEAT_HELLFIRE_CHAIN, oSkin);
|
|
|
|
if(GetHasInvocation(INVOKE_ELDRITCH_CONE))
|
|
AddSkinFeat(FEAT_HELLFIRE_CONE, IP_FEAT_HELLFIRE_CONE, oSkin);
|
|
|
|
if(GetHasInvocation(INVOKE_ELDRITCH_LINE))
|
|
AddSkinFeat(FEAT_HELLFIRE_LINE, IP_FEAT_HELLFIRE_LINE, oSkin);
|
|
|
|
if(GetHasInvocation(INVOKE_ELDRITCH_DOOM))
|
|
AddSkinFeat(FEAT_HELLFIRE_DOOM, IP_FEAT_HELLFIRE_DOOM, oSkin);
|
|
}
|
|
} |