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